﻿Imports ComponentFactory.Krypton.Toolkit
Imports System.Data.OleDb
Imports WiseLibraries.Net
Imports WiseLibraries.Strings
Imports System.Text

Public Class CadastroProduto
    Inherits KryptonForm

    Private conexao As OleDbConnection
    Private command As OleDbCommand
    Private dataSet As DataSet
    Private dataview As DataView
    Private dataAdapter As OleDbDataAdapter
    Private cmdBuilder As OleDbCommandBuilder
    Private produto As Integer ' variavel do codigo do produto para o modo editar
    Private strsalvar As String
    Private tipocadastro As String
    Private sb As StringBuilder
    Private camposErrados As ArrayList 'Para a validação
    Private colorCleaner As ComponentColorCleaner

#Region "Atributos"
    Private nome As String = Nothing
    Private descricao As String = Nothing
    Private marca As Integer = Nothing
    Private lote As String = Nothing
    Private valor As Decimal = Nothing
    Private quantEmbalagem As Integer = Nothing
    Private fornecedor As Integer = Nothing
    Private preco As Double = Nothing

#End Region

    Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.

        conexao = FabricaDeConexoes.CriarConexao()

        carregarMarcas()
        carregarFornecedor()
        tipocadastro = "novo"
        colorCleaner = New ComponentColorCleaner
        colorCleaner.add(Me.Controls, Assistente.COR_NORMAL)
        cbfornecedor.SelectedIndex = 0
        cbmarca.SelectedIndex = 0

    End Sub

    Sub New(ByVal produto As Integer)
        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.
        tipocadastro = "editar"
        btnLimpar.Visible = False
        btnSalvar.Left = btnLimpar.Left

        Me.Text = "Wotan - Edição de cadastro de produto"
        Me.produto = produto
        Me.carregarFornecedor()
        Me.carregarMarcas()

        conexao = FabricaDeConexoes.CriarConexao()
        conexao.Open()
        command = New OleDbCommand("SELECT tblProduto.*, tblFornecedor.nomeFornecedor, tblMarcaProduto.descricaomarcaProduto FROM ((tblProduto INNER JOIN tblFornecedor ON tblProduto.codFornecedor = tblFornecedor.codFornecedor) INNER JOIN tblMarcaProduto ON tblProduto.codmarcaProduto = tblMarcaProduto.codmarcaProduto) WHERE codProduto = " & produto, conexao)
        Debug.WriteLine(command)
        Dim dr As OleDbDataReader = command.ExecuteReader()

        dr.Read()

        If (dr("codProduto") = produto) Then

            txtnome.Text = dr("nomeProduto")
            txtdescricao.Text = If(dr("descricaoProduto").Equals(DBNull.Value), Nothing, dr("descricaoProduto"))
            txtpreco.Text = If(dr("precoProduto").Equals(DBNull.Value), Nothing, dr("precoProduto"))
            txtlote.Text = If(dr("loteProduto").Equals(DBNull.Value), Nothing, dr("loteProduto"))
            txtqtdeembalagem.Text = If(dr("quantidadeProduto").Equals(DBNull.Value), Nothing, dr("quantidadeProduto"))
            cbfornecedor.Text = dr("nomeFornecedor")
            cbmarca.Text = dr("descricaomarcaProduto")
        End If

        conexao.Close()
        colorCleaner = New ComponentColorCleaner
        colorCleaner.add(Me.Controls, Assistente.COR_NORMAL)
    End Sub

    Private Sub carregarFornecedor()
        
        Try
            Dim strfornecedor As String = "SELECT * FROM tblFornecedor"
            conexao = FabricaDeConexoes.CriarConexao()
            command = New OleDbCommand(strfornecedor, conexao)
            dataAdapter = New OleDbDataAdapter(command)
            dataSet = New DataSet()
            dataAdapter.Fill(dataSet, "tblFornecedor")

            cbfornecedor.DataSource = dataSet.Tables("tblFornecedor")
            cbfornecedor.DisplayMember = "nomeFornecedor"
            cbfornecedor.ValueMember = "codFornecedor"

        Catch ex As Exception
            Debug.WriteLine(ex)
        End Try
    End Sub
    Private Sub carregarMarcas()
        Try
            Dim strmarca As String = "SELECT * FROM tblMarcaProduto"
            conexao = FabricaDeConexoes.CriarConexao()
            command = New OleDbCommand(strmarca, conexao)
            dataAdapter = New OleDbDataAdapter(command)
            dataSet = New DataSet()
            dataAdapter.Fill(dataSet, "tblMarcaProduto")
            cbmarca.DataSource = dataSet.Tables("tblMarcaProduto")
            cbmarca.DisplayMember = "descricaomarcaProduto"
            cbmarca.ValueMember = "codMarcaProduto"
        Catch ex As Exception
            Debug.WriteLine("Erro: " & ex.Message)
        Finally
            conexao.Close()
            command.Dispose()
            dataAdapter.Dispose()
        End Try

    End Sub

    Private Sub btnAddMarca_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddMarca.Click
        conexao.Open()
        Dim frm As New EditorDeTabelaSimples("Adicionar ou remover Marcas", conexao, "tblMarcaProduto", "descricaoMarcaProduto")
        frm.ShowDialog()

        cbmarca.DataBindings.Clear()
        cbmarca.DataSource = Nothing
        cbmarca.Refresh()

        carregarMarcas()

        conexao.Close()
    End Sub

    Private Sub btnAddFornecedor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddFornecedor.Click
        Try
            Dim frm As New CadastroFornecedor()
            frm.ShowDialog()

            cbfornecedor.DataBindings.Clear()
            cbfornecedor.DataSource = Nothing
            cbfornecedor.Refresh()

            carregarFornecedor()

        Catch ex As Exception
            Debug.WriteLine(ex)
        End Try
    End Sub

    Private Sub btnLimpar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpar.Click
        Assistente.limparCampos(Me)
        Assistente.trocaCorTransition(Me)
        cbfornecedor.SelectedIndex = 0
        cbmarca.SelectedIndex = 0
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Me.Dispose()
    End Sub

    Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click
        If (tipocadastro = "novo") Then
            If (validarProduto()) Then
                cadastrarProduto()
                KryptonMessageBox.Show("Produto cadastrado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Dispose()
            End If

        ElseIf (tipocadastro = "editar") Then
            If (validarProduto()) Then
                AtualizarProduto()
                KryptonMessageBox.Show("Produto atualizado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Dispose()

            End If
        End If
    End Sub

    Private Sub verificarCampos()

        If (sb.Length > 0) Then
            Dim c() As Control
            c = camposErrados.ToArray(GetType(Control))
            Assistente.trocaCorCampos(c, Assistente.COR_ERRO)
            KryptonMessageBox.Show("Há erros nos seguintes campos:" & vbNewLine & sb.ToString() & vbNewLine & "Verifique e tente novamente.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub

    Private Function validarProduto() As Boolean
        Dim val As New RegexValidator()

        camposErrados = New ArrayList()
        sb = New StringBuilder()
        'Valida Proprietário

        If Not (String.IsNullOrEmpty(txtnome.Text)) Then
            nome = txtnome.Text
        Else
            camposErrados.Add(txtnome)
            sb.Append("Nome" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtdescricao.Text)) Then
            descricao = txtdescricao.Text
        Else
            camposErrados.Add(txtdescricao)
            sb.Append("Descricao" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(cbmarca.Text)) Then
            marca = DirectCast(cbmarca.SelectedItem, DataRowView).Item("codMarcaProduto")
        Else
            camposErrados.Add(cbmarca)
            sb.Append("Marca" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(cbfornecedor.Text)) Then
            fornecedor = DirectCast(cbfornecedor.SelectedItem, DataRowView).Item("codFornecedor")

        Else
            camposErrados.Add(cbfornecedor)
            sb.Append("Fornecedor" & vbNewLine)

        End If

        If Not (String.IsNullOrEmpty(txtlote.Text)) Then
            lote = txtlote.Text

        Else
            camposErrados.Add(txtlote)
            sb.Append("Lote" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtpreco.Text)) Then
            preco = txtpreco.Text
        Else
            camposErrados.Add(txtpreco)
            sb.Append("Preco" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtqtdeembalagem.Text)) Then
            quantEmbalagem = txtqtdeembalagem.Text
        Else
            camposErrados.Add(txtqtdeembalagem)
            sb.Append("Quantidade Embalagem" & vbNewLine)
        End If

        verificarCampos()

        If (sb.Length > 0) Then
            Return (False)
        Else
            Return (True)
        End If

    End Function

    Private Sub cadastrarProduto()

        If (validarProduto() = True) Then

            Dim sql As String = "INSERT INTO tblProduto(nomeProduto,codmarcaProduto,loteProduto, descricaoProduto, precoProduto, quantidadeProduto,codFornecedor) VALUES('" & _
            nome & "','" & _
            marca & "','" & _
            lote & "','" & _
            descricao & "','" & _
            preco & "','" & _
            quantEmbalagem & "','" & _
            fornecedor & "')"

            Try
                conexao.Open()
                command = New OleDbCommand(sql, conexao)
                command.ExecuteNonQuery()
                Assistente.limparCampos(Me)
            Catch ex As Exception
                Debug.WriteLine(ex.Message)
                KryptonMessageBox.Show("Produto nao cadastrado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Assistente.limparCampos(Me)
            End Try
        End If
    End Sub

    Private Sub AtualizarProduto()
        Try

            Dim sql = "UPDATE tblProduto SET nomeProduto = '" & nome & "', codmarcaProduto = " & marca & ", loteProduto = '" & lote & "', descricaoProduto = '" & descricao & "', precoProduto = " & preco & ", quantidadeProduto= " & quantEmbalagem & ", codFornecedor = " & fornecedor & " WHERE codProduto = " & produto
            Debug.WriteLine(sql)
            conexao.Open()
            command = New OleDbCommand(sql, conexao)
            command.ExecuteNonQuery()

        Catch ex As Exception

            Debug.WriteLine(ex)
        End Try
    End Sub

    Private Sub txtpreco_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        ValidaNumero(txtpreco, e)
    End Sub

    Private Sub ValidaNumero(ByVal txtbox As KryptonTextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = "." And Not e.KeyChar = "," Then
            e.Handled = True
        End If
    End Sub

    Private Sub ValidaLetras(ByVal txtbox As KryptonTextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Not Char.IsLetter(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = "." And Not e.KeyChar = "," And Not e.KeyChar = " " Then
            e.Handled = True
        End If
    End Sub

    Private Sub txtnome_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtnome.KeyPress
        ValidaLetras(txtnome, e)
    End Sub

    Private Sub txtqtdeembalagem_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtqtdeembalagem.KeyPress
        ValidaNumero(txtqtdeembalagem, e)
    End Sub

End Class